package co.eam.edu.proyecto_final_empresa.web.controladores;

import java.io.Serializable;

import javax.faces.application.FacesMessage;
import javax.faces.application.FacesMessage.Severity;
import javax.faces.context.FacesContext;
import javax.servlet.http.HttpSession;

import co.eam.edu.proyecto_final_empresa.persistencia.entidades.Persona;
/**
 * 
   Bean del que deben heredar todas los controladores.
 * @author Andres Felipe Garcia Galindo <andres.sva.10@gmail.com>
 * @date 24/09/2014
 * Iteracion:
 * HU:
 * Escuela de Administracion y Mercadotecnia del Quindio-EAM
 * Curso de Desarrollo en Equipo
 */
public class BeanComun implements Serializable {

	/**
	 * Metodo para agregar un mensaje global al facescontext.
	 * 
	 * @param mensaje
	 *            , mensaje a enviar a la pagina
	 * @param severidad
	 *            , severidad o criticidad del mensaje.
	 */
	public void agregarMensaje(String mensaje, Severity severidad) {
		FacesContext.getCurrentInstance().addMessage(null,
				new FacesMessage(severidad, mensaje, null));
	}
	
	/**
	 * Metodo para agregar un objeto a sesion.
	 * @param clave, clave que identifica el mensaje
	 * @param valor, valor a alamacenar.
	 */
	public void agregarASesion(String clave,Object valor){
		HttpSession session=((HttpSession) FacesContext.getCurrentInstance().getExternalContext()
				.getSession(true));
		session.setAttribute(clave, valor);
	}
	
	/**
	 * Metodo para quitar un objeto a sesion.
	 * @param clave, clave que identifica el mensaje a eliminar.
	 
	 */
	public void quitar(String clave){
		HttpSession session=((HttpSession) FacesContext.getCurrentInstance().getExternalContext()
				.getSession(true));
		session.removeAttribute(clave);
	}
	
	
	/**
	 * Metodo para obtener un objeto de sesion.
	 * @param clave, clave que identifica el mensaje
	 * @return el objeto o null si no esta.
	 */
	public <T> T obtenerDeSession(String clave){
		HttpSession session=((HttpSession) FacesContext.getCurrentInstance().getExternalContext()
				.getSession(true));
		
		return (T) session.getAttribute(clave);
		
	}
	
	
	
	/**
	 * 
	 *Metodo para obtener la persona que esta en sesion
	 *@author Andres Felipe Garcia Galindo <andres.sva.10@gmail.com>
	 *@date 24/09/2014 
	 *HU:
	 *Iteracion:
	 * @return
	 */
	public Persona getUsuarioSesion(){
		return obtenerDeSession("persona");
	}
	
	
	

}
